package leetcode_1000;

import java.util.ArrayList;
import java.util.List;

/**
 *@author 周杨
 *FruitIntoBaskets_904 一个数组 问可以选择两个数值相同的连续子数组 问最大长度
 *describe:用数组和的思想解决 AC 56%
 *2018年11月14日 下午6:29:49
 */
public class FruitIntoBaskets_904 {
	public static void main(String[] args) {
		FruitIntoBaskets_904 test=new FruitIntoBaskets_904();
		System.out.println(test.totalFruit(new int[] {3,3,3,1,2,1,1,2,3,3,4}));
	}
	
	public int totalFruit(int[] tree) {
        List<Integer> elements=new ArrayList<Integer>();
        List<Integer> counts=new ArrayList<Integer>();
        int left=0;
        while(left<tree.length) {
        	int right=left+1;
        	while(right<tree.length&&tree[right]==tree[left]) ++right;
        	elements.add(tree[left]);
        	counts.add(right-left);
        	left=right;
        }
        if(elements.size()==1)
        	return counts.get(0);//只有1种树
        int index=0;
        int res=0;
        while(index<elements.size()-1) {
        	int now=counts.get(index)+counts.get(index+1);
        	int ele1=elements.get(index),ele2=elements.get(index+1);
        	int run=index+2;//因为前两者无疑可以自由组合
        	while(run!=counts.size()&&(elements.get(run)==ele1||elements.get(run)==ele2)) {
        		now+=counts.get(run);
        		++run;
        	}
        	res=Math.max(res, now);
        	index=run-1;//那么我们放弃这个两个数字的重复累加
        }
        return res;
    }
}
